# @Author   :hcs
# @File     :3-深copy和浅copy.py
# @Time     :2025/2/27 下午4:49

import copy


def use_copy():
    a = [12, 22]
    b = [33, 44]
    c = copy.copy(a)  # 浅copy
    """
        效果与c = a.copy一样,唯一的区别是:
        当要复制的对象不是数据容器而是自定义对象时，
        自定义的对象是没有.copy这个方法的（数据容器自带copy）
        所以需要利用copy.copy()来进行复制。
    """
    print(c)
    a[0] = 50
    print(c)


def use_deep_copy_1():
    a = [12, 22]
    b = [33, 44]
    c = [a, b]
    d = copy.copy(c)  # 浅拷贝
    print(f"c的id为：{id(c)} d的id为：{id(d)}")
    for i in c:
        print(f"c中元素的id为：{id(i)}")
    for j in d:
        print(f"d中元素的id为：{id(j)}")
    print(f"a改变前，d为：{d}")
    print(f"a改变前，c为：{c}")
    a[0] = 50
    print(f"a改变前，d为：{d}")
    print(f"a改变前，c为：{c}")


def use_deep_copy():
    a = [12, 22]
    b = [33, 44]
    c = [a, b]
    d = copy.deepcopy(c)  # 深拷贝
    print(f"c的id为：{id(c)} d的id为：{id(d)}")
    for i in c:
        print(f"c中元素的id为：{id(i)}")
    for j in d:
        print(f"d中元素的id为：{id(j)}")
    print(f"a改变前，d为：{d}")
    print(f"a改变前，c为：{c}")
    a[0] = 50
    print(f"a改变前，d为：{d}")
    print(f"a改变前，c为：{c}")


use_deep_copy_1()
print('-' * 100)
use_deep_copy()
